home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / cmds / gdb.new / gdb-3.98 / include / m68kcoff.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-08-01  |  5.1 KB  |  203 lines

  1. /*** coff information for M68K */
  2.  
  3. /********************** FILE HEADER **********************/
  4.  
  5. struct external_filehdr {
  6.     char f_magic[2];    /* magic number            */
  7.     char f_nscns[2];    /* number of sections        */
  8.     char f_timdat[4];    /* time & date stamp        */
  9.     char f_symptr[4];    /* file pointer to symtab    */
  10.     char f_nsyms[4];    /* number of symtab entries    */
  11.     char f_opthdr[2];    /* sizeof(optional hdr)        */
  12.     char f_flags[2];    /* flags            */
  13. };
  14.  
  15.  
  16. /* Motorola 68000/68008/68010/68020 */
  17. #define    MC68MAGIC    0520
  18. #define MC68KWRMAGIC    0520    /* writeable text segments */
  19. #define    MC68TVMAGIC    0521
  20. #define MC68KROMAGIC    0521    /* readonly shareable text segments */
  21. #define MC68KPGMAGIC    0522    /* demand paged text segments */
  22. #define    M68MAGIC    0210
  23. #define    M68TVMAGIC    0211
  24.  
  25. #define M68KBADMAG(x) (((x).f_magic!=MC68MAGIC) && ((x).f_magic!=MC68KWRMAGIC) && ((x).f_magic!=MC68TVMAGIC) && \
  26.   ((x).f_magic!=MC68KROMAGIC) && ((x).f_magic!=MC68KPGMAGIC) && ((x).f_magic!=M68MAGIC) && ((x).f_magic!=M68TVMAGIC) )
  27.  
  28.             
  29.  
  30. #define    FILHDR    struct external_filehdr
  31. #define    FILHSZ    sizeof(FILHDR)
  32.  
  33.  
  34. /********************** AOUT "OPTIONAL HEADER" **********************/
  35.  
  36.  
  37. typedef struct 
  38. {
  39.   char     magic[2];        /* type of file                */
  40.   char    vstamp[2];        /* version stamp            */
  41.   char    tsize[4];        /* text size in bytes, padded to FW bdry*/
  42.   char    dsize[4];        /* initialized data "  "        */
  43.   char    bsize[4];        /* uninitialized data "   "        */
  44.   char    entry[4];        /* entry pt.                */
  45.   char     text_start[4];        /* base of text used for this file */
  46.   char     data_start[4];        /* base of data used for this file */
  47.   char    tagentries[4];        /* number of tag entries to follow */
  48. }
  49. AOUTHDR;
  50.  
  51. #define AOUTSZ (sizeof(AOUTHDR))
  52.  
  53.  
  54.  
  55. /********************** SECTION HEADER **********************/
  56.  
  57.  
  58. struct external_scnhdr {
  59.     char        s_name[8];    /* section name            */
  60.     char        s_paddr[4];    /* physical address, aliased s_nlib */
  61.     char        s_vaddr[4];    /* virtual address        */
  62.     char        s_size[4];    /* section size            */
  63.     char        s_scnptr[4];    /* file ptr to raw data for section */
  64.     char        s_relptr[4];    /* file ptr to relocation    */
  65.     char        s_lnnoptr[4];    /* file ptr to line numbers    */
  66.     char        s_nreloc[2];    /* number of relocation entries    */
  67.     char        s_nlnno[2];    /* number of line number entries*/
  68.     char        s_flags[4];    /* flags            */
  69. };
  70.  
  71. /*
  72.  * names of "special" sections
  73.  */
  74. #define _TEXT    ".text"
  75. #define _DATA    ".data"
  76. #define _BSS    ".bss"
  77.  
  78.  
  79. #define    SCNHDR    struct external_scnhdr
  80. #define    SCNHSZ    sizeof(SCNHDR)
  81.  
  82.  
  83. /********************** LINE NUMBERS **********************/
  84.  
  85. /* 1 line number entry for every "breakpointable" source line in a section.
  86.  * Line numbers are grouped on a per function basis; first entry in a function
  87.  * grouping will have l_lnno = 0 and in place of physical address will be the
  88.  * symbol table index of the function name.
  89.  */
  90. struct external_lineno {
  91.     union {
  92.         char l_symndx[4];    /* function name symbol index, iff l_lnno == 0*/
  93.         char l_paddr[4];    /* (physical) address of line number    */
  94.     } l_addr;
  95.     char l_lnno[2];    /* line number        */
  96. };
  97.  
  98.  
  99. #define    LINENO    struct external_lineno
  100. #define    LINESZ    sizeof(LINENO) 
  101.  
  102.  
  103. /********************** SYMBOLS **********************/
  104.  
  105. #define SYMNMLEN    8    /* # characters in a symbol name    */
  106. #define FILNMLEN    14    /* # characters in a file name        */
  107. #define DIMNUM        4    /* # array dimensions in auxiliary entry */
  108.  
  109. struct external_syment 
  110. {
  111.   union {
  112.     char e_name[SYMNMLEN];
  113.     struct {
  114.       char e_zeroes[4];
  115.       char e_offset[4];
  116.     } e;
  117.   } e;
  118.   char e_value[4];
  119.   char e_scnum[2];
  120.   char e_type[2];
  121.   char e_sclass[1];
  122.   char e_numaux[1];
  123. };
  124.  
  125.  
  126.  
  127. #define N_BTMASK    (017)
  128. #define N_TMASK        (060)
  129. #define N_BTSHFT    (4)
  130. #define N_TSHIFT    (2)
  131.   
  132.  
  133. union external_auxent {
  134.     struct {
  135.         char x_tagndx[4];    /* str, un, or enum tag indx */
  136.         union {
  137.             struct {
  138.                 char  x_lnno[2]; /* declaration line number */
  139.                 char  x_size[2]; /* str/union/array size */
  140.             } x_lnsz;
  141.             char x_fsize[4];    /* size of function */
  142.         } x_misc;
  143.         union {
  144.             struct {        /* if ISFCN, tag, or .bb */
  145.                 char x_lnnoptr[4];    /* ptr to fcn line # */
  146.                 char x_endndx[4];    /* entry ndx past block end */
  147.             } x_fcn;
  148.             struct {        /* if ISARY, up to 4 dimen. */
  149.                 char x_dimen[DIMNUM][2];
  150.             } x_ary;
  151.         } x_fcnary;
  152.         char x_tvndx[2];        /* tv index */
  153.     } x_sym;
  154.  
  155.     union {
  156.         char x_fname[FILNMLEN];
  157.         struct {
  158.             char x_zeroes[4];
  159.             char x_offset[4];
  160.         } x_n;
  161.     } x_file;
  162.  
  163.     struct {
  164.         char x_scnlen[4];            /* section length */
  165.         char x_nreloc[2];    /* # relocation entries */
  166.         char x_nlinno[2];    /* # line numbers */
  167.     } x_scn;
  168.  
  169.         struct {
  170.         char x_tvfill[4];    /* tv fill value */
  171.         char x_tvlen[2];    /* length of .tv */
  172.         char x_tvran[2][2];    /* tv range */
  173.     } x_tv;        /* info about .tv section (in auxent of symbol .tv)) */
  174.  
  175.  
  176. };
  177.  
  178. #define    SYMENT    struct external_syment
  179. #define    SYMESZ    18    
  180. #define    AUXENT    union external_auxent
  181. #define    AUXESZ    18
  182.  
  183.  
  184.  
  185. /********************** RELOCATION DIRECTIVES **********************/
  186.  
  187.  
  188. struct external_reloc {
  189.   char r_vaddr[4];
  190.   char r_symndx[4];
  191.   char r_type[2];
  192. };
  193.  
  194.  
  195. #define RELOC struct external_reloc
  196. #define RELSZ 10
  197.  
  198. #define DEFAULT_DATA_SECTION_ALIGNMENT 4
  199. #define DEFAULT_BSS_SECTION_ALIGNMENT 4
  200. #define DEFAULT_TEXT_SECTION_ALIGNMENT 4
  201. /* For new sections we havn't heard of before */
  202. #define DEFAULT_SECTION_ALIGNMENT 4
  203.